﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

namespace EasyTrader.Form
{
    public partial class OperationSettings : System.Windows.Forms.Form
    {
        public OperationSettings()
        {
            InitializeComponent();
            InitControl();
        }

        private void InitControl()
        {
            textBoxDayCloseHour.Text = GlobalVar.DayCloseHour.ToString();
            textBoxDayCloseMin.Text = GlobalVar.DayCloseMin.ToString();
            textBoxDayOpenTime.Text = GlobalVar.DayOpenTime.ToString();
            textBoxDayOpenMin.Text = GlobalVar.DayOpenMin.ToString();
            textBoxNightOpenTime.Text = GlobalVar.NightOpenTime.ToString();
            textBoxStockCode.Text = GlobalVar.StockCode;
            if (GlobalVar.OperationMode == GlobalVar.OperationModeNormal)
            {
                comboOperationMode.SelectedIndex = 0;
            }
            else
            {
                comboOperationMode.SelectedIndex = 1;
            }

            int selectedIndex = comboReferenceRange.FindString(GlobalVar.ReferenceRange.ToString());
            comboReferenceRange.SelectedIndex = selectedIndex;

            selectedIndex = comboPriceReferenceRange.FindString(GlobalVar.PriceReferenceRange.ToString());
            comboPriceReferenceRange.SelectedIndex = selectedIndex;

            selectedIndex = comboHogaReferenceRange.FindString(GlobalVar.HogaReferenceRange.ToString());
            comboHogaReferenceRange.SelectedIndex = selectedIndex;

            selectedIndex = comboRegressionType.FindString(GlobalVar.RegressionType);
            comboRegressionType.SelectedIndex = selectedIndex;

            selectedIndex = comboMaxDailyGap.FindString(GlobalVar.MaxDailyGap.ToString());
            comboMaxDailyGap.SelectedIndex = selectedIndex;


            nudMainTimerInterval.Value = GlobalVar.MainTimerInterval;
            nudSubTimerInterval.Value = GlobalVar.SubTimerInterval;
            comboSignalMethod.SelectedIndex = GlobalVar.SignalMethod;

            if (GlobalVar.SubjectSelection == 0)
            {
                radioSubjectSelect1.Checked = true;
            }
            else if (GlobalVar.SubjectSelection == 1)
            {
                radioSubjectSelect2.Checked = true;
            }
            else if (GlobalVar.SubjectSelection == 2)
            {
                radioSubjectSelect3.Checked = true;
            }
            else if (GlobalVar.SubjectSelection == 3)
            {
                radioSubjectSelect4.Checked = true;
            }

            if (GlobalVar.SaveEveryMinute == true)
            {
                cbSaveEveryMinute.Checked = true;
            }
            else
            {
                cbSaveEveryMinute.Checked = false;
            }

            if (GlobalVar.OptionExtremeCase == true)
            {
                cbOptionExtremeCase.Checked = true;
            }
            else
            {
                cbOptionExtremeCase.Checked = false;
            }

            if (GlobalVar.FirstSignalFilter == true)
            {
                cbFirstSignalFilter.Checked = true;
            }
            else
            {
                cbFirstSignalFilter.Checked = false;
            }

            if (GlobalVar.AfterFirstSignalFilter == true)
            {
                cbAfterFirstSignalFilter.Checked = true;
            }
            else
            {
                cbAfterFirstSignalFilter.Checked = false;
            }

            if (GlobalVar.EnableSound == true)
            {
                cbEnableSound.Checked = true;
            }
            else
            {
                cbEnableSound.Checked = false;
            }
        }

        private void textBoxDayCloseHour_TextChanged(object sender, EventArgs e)
        {
            string selText = textBoxDayCloseHour.Text;
            if (selText == "")
                return;
            GlobalVar.DayCloseHour = Convert.ToInt32(selText);

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("DayCloseHour", GlobalVar.DayCloseHour.ToString());
        }

        private void textBoxDayCloseMin_TextChanged(object sender, EventArgs e)
        {
            string selText = textBoxDayCloseMin.Text;
            if (selText == "")
                return;
            GlobalVar.DayCloseMin = Convert.ToInt32(selText);

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("DayCloseMin", GlobalVar.DayCloseMin.ToString());
        }

        private void textBoxDayOpenTime_TextChanged(object sender, EventArgs e)
        {
            string selText = textBoxDayOpenTime.Text;
            if (selText == "")
                return;
            GlobalVar.DayOpenTime = Convert.ToInt32(selText);

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("DayOpenTime", GlobalVar.DayOpenTime.ToString());
        }

        private void textBoxNightOpenTime_TextChanged(object sender, EventArgs e)
        {
            string selText = textBoxNightOpenTime.Text;
            if (selText == "")
                return;
            GlobalVar.NightOpenTime = Convert.ToInt32(selText);

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("NightOpenTime", GlobalVar.NightOpenTime.ToString());
        }

        private void comboOperationMode_SelectedIndexChanged(object sender, EventArgs e)
        {
            int oldMode = GlobalVar.OperationMode;
            int selectedIndex = comboOperationMode.SelectedIndex;
            if (selectedIndex == -1)
                return;
            GlobalVar.OperationMode = selectedIndex;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("OperationMode", selectedIndex.ToString());

            if (GlobalVar.OperationMode != oldMode)
            {
                System.Windows.Forms.MessageBox.Show(GlobalVar.OperationChangedWarnMsg);
                return;
            }
        }

        private void comboReferenceRange_SelectedIndexChanged(object sender, EventArgs e)
        {
            string selText = comboReferenceRange.SelectedItem.ToString();
            if (selText == "")
                return;
            GlobalVar.ReferenceRange = Convert.ToInt32(selText);

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("ReferenceRange", GlobalVar.ReferenceRange.ToString());
        }

        private void comboRegressionType_SelectedIndexChanged(object sender, EventArgs e)
        {
            string selText = comboRegressionType.SelectedItem.ToString();
            if (selText == "")
                return;
            GlobalVar.RegressionType = selText;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("RegressionType", selText);
        }

        private void textBoxStockCode_TextChanged(object sender, EventArgs e)
        {
            string selText = textBoxStockCode.Text;
            if (selText == "")
                return;
            GlobalVar.StockCode = selText;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("StockCode", GlobalVar.StockCode);
        }

        private void nudMainTimerInterval_ValueChanged(object sender, EventArgs e)
        {
            
            GlobalVar.MainTimerInterval = (int)nudMainTimerInterval.Value;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("MainTimerInterval", GlobalVar.MainTimerInterval.ToString());
        }

        private void nudSubTimerInterval_ValueChanged(object sender, EventArgs e)
        {
            GlobalVar.SubTimerInterval = (int)nudSubTimerInterval.Value;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("SubTimerInterval", GlobalVar.SubTimerInterval.ToString());
        }

        private void comboSignalMethod_SelectedIndexChanged(object sender, EventArgs e)
        {
            GlobalVar.SignalMethod = comboSignalMethod.SelectedIndex;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("SignalMethod", GlobalVar.SignalMethod.ToString());
        }

        private void radioSubjectSelect1_CheckedChanged(object sender, EventArgs e)
        {
            GlobalVar.SubjectSelection = 0;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("SubjectSelection", GlobalVar.SubjectSelection.ToString());
        }

        private void radioSubjectSelect2_CheckedChanged(object sender, EventArgs e)
        {
            GlobalVar.SubjectSelection = 1;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("SubjectSelection", GlobalVar.SubjectSelection.ToString());
        }

        private void radioSubjectSelect3_CheckedChanged(object sender, EventArgs e)
        {
            GlobalVar.SubjectSelection = 2;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("SubjectSelection", GlobalVar.SubjectSelection.ToString());
        }

        private void radioSubjectSelect4_CheckedChanged(object sender, EventArgs e)
        {
            GlobalVar.SubjectSelection = 3;

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("SubjectSelection", GlobalVar.SubjectSelection.ToString());
        }

        private void cbSaveEveryMinute_CheckedChanged(object sender, EventArgs e)
        {
            string selText = "";
            if (cbSaveEveryMinute.Checked == true)
            {
                selText = "True";
                GlobalVar.SaveEveryMinute = true;
            }
            else
            {
                selText = "False";
                GlobalVar.SaveEveryMinute = false;
            }


            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("SaveEveryMinute", selText);
        }

        private void comboMaxDailyGap_SelectedIndexChanged(object sender, EventArgs e)
        {
            string selText = comboMaxDailyGap.SelectedItem.ToString();
            if (selText == "")
                return;
            GlobalVar.MaxDailyGap = Convert.ToDouble(selText);

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("MaxDailyGap", GlobalVar.MaxDailyGap.ToString());
        }

        private void cbOptionExtremeCase_CheckedChanged(object sender, EventArgs e)
        {
            string selText = "";
            if (cbOptionExtremeCase.Checked == true)
            {
                selText = "True";
                GlobalVar.OptionExtremeCase = true;
            }
            else
            {
                selText = "False";
                GlobalVar.OptionExtremeCase = false;
            }


            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("OptionExtremeCase", selText);
        }

        private void cbFirstSignalFilter_CheckedChanged(object sender, EventArgs e)
        {
            string selText = "";
            if (cbFirstSignalFilter.Checked == true)
            {
                selText = "True";
                GlobalVar.FirstSignalFilter = true;
            }
            else
            {
                selText = "False";
                GlobalVar.FirstSignalFilter = false;
            }


            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("FirstSignalFilter", selText);
        }

        private void cbAfterFirstSignalFilter_CheckedChanged(object sender, EventArgs e)
        {
            string selText = "";
            if (cbAfterFirstSignalFilter.Checked == true)
            {
                selText = "True";
                GlobalVar.AfterFirstSignalFilter = true;
            }
            else
            {
                selText = "False";
                GlobalVar.AfterFirstSignalFilter = false;
            }


            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("AfterFirstSignalFilter", selText);
        }

        private void comboPriceReferenceRange_SelectedIndexChanged(object sender, EventArgs e)
        {
            string selText = comboPriceReferenceRange.SelectedItem.ToString();
            if (selText == "")
                return;
            GlobalVar.PriceReferenceRange = Convert.ToInt32(selText);

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("PriceReferenceRange", GlobalVar.PriceReferenceRange.ToString());
        }

        private void btnBuySoundTest_Click(object sender, EventArgs e)
        {
            GlobalVar.PlayOrderBuySound();
        }

        private void btnSellSoundTest_Click(object sender, EventArgs e)
        {
            GlobalVar.PlayOrderSellSound();
        }

        private void textBoxDayOpenMin_TextChanged(object sender, EventArgs e)
        {
            string selText = textBoxDayOpenMin.Text;
            if (selText == "")
                return;
            GlobalVar.DayOpenMin = Convert.ToInt32(selText);

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("DayOpenMin", GlobalVar.DayOpenMin.ToString());
        }

        private void comboHogaReferenceRange_SelectedIndexChanged(object sender, EventArgs e)
        {
            string selText = comboHogaReferenceRange.SelectedItem.ToString();
            if (selText == "")
                return;
            GlobalVar.HogaReferenceRange = Convert.ToInt32(selText);

            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("HogaReferenceRange", GlobalVar.HogaReferenceRange.ToString());
        }

        private void cbEnableSound_CheckedChanged(object sender, EventArgs e)
        {
            string selText = "";
            if (cbEnableSound.Checked == true)
            {
                selText = "True";
                GlobalVar.EnableSound = true;
            }
            else
            {
                selText = "False";
                GlobalVar.EnableSound = false;
            }



            string regSubkey = "Software\\EasyTrader\\Operation";
            // 서브키를 얻어온다. 없으면 null
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(regSubkey, true);
            // 없으면 서브키를 만든다.
            if (rk == null)
            {
                // 해당이름으로 서브키 생성
                rk = Registry.CurrentUser.CreateSubKey(regSubkey);
            }

            // 서브키 아래 값 쓰기
            rk.SetValue("EnableSound", selText);
        }
    }
}
